#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>

void handler(int sig)
{
    std::cout << "get a sig: " << sig << std::endl;
}

int main()
{
    // signal(SIGFPE, handler);
    // int a = 10;
    // a /= 0;

   // int *p = nullptr;
    // *p = 100; // SIGSEGV
    int a = 10;
    a /= 0;      // 8) SIGFPE
    while (true)
    {
        std::cout << "hello bit, pid: " << getpid() << std::endl;
 
        sleep(1);
    }
   
}

//  int cnt = 1;
// void hander(int sig)
// {
//     std::cout<<"cnt " << cnt<<"get a sig: " << sig << std::endl;
//     // std::cout << "get a sig: " << sig << std::endl;
//     // exit(1);
// }

// int main()
// {
//    signal(SIGABRT,hander);

//     alarm(1);
//     // alarm(10);//设定一秒后的闹钟
//     // sleep(4);
//     // int n = alarm(2);//alarm(0)取消闹种  上一个闹钟剩余的时间
//     // std::cout<<"n : "<<n<<std::endl;
//     while (true)
//     {
//         std::cout<<"cnt: " <<cnt<<std::endl;

//         cnt++;
//         sleep(1);
//     }

// }

// void hander(int sig)
// {
//     std::cout << "get a sig: " << sig << std::endl;
// }
// int main()
// {
//     int cnt = 0;

//     // signal(SIGABRT,hander);

//     for (int i = 1; i <= 31; i++)
//     {
//         signal(i,hander);
//     }

//     while (true)
//     {
//        sleep(2);
//         std::cout << "hello zyy, pid: " << getpid() << std::endl;
//     //    raise(3);
//         // abort();
//     }

// }

// int main(int argc,char *argv[])
// {
//     if(argc!=3)
//     {
//         std::cerr<<"Usage:"<<argv[0]<<"signum pid"<<std::endl;
//         return 1;
//     }
//     pid_t pid = std::stoi(argv[2]);
//     int signum = std::stoi(argv[1]);
//     kill(pid,signum);
// }

// void hander(int sig)
// {
//     std::cout << "get a sig :" << sig << std::endl;
// }

// int main()
// {

//     // 对信号的定义捕捉，捕捉一次，后面一直有效
//     // signal(2, hander);
//      signal(3, hander);
//     // signal(4, hander);
//     // signal(5, hander);
//     // 对信号的自定义捕捉，我们只要捕捉一次，后续一直有效
//     // 1. 一直不产生？
//     // 2. 可不可以对更多的信号进行捕捉？
//     // 3. 2 SIGINT默认是什么动作呢？终止进程
//     // 4. 2 SIGINT是什么呢？ctrl+c --- 给目标进程发送2号信号，SIGINT默认是什么动作呢？终止进程
//     while (true)
//     {
//         std::cout << "hello zyy,pid:" << getpid() << std::endl;
//         sleep(1);
//     }
//     return 0;
// }